/****************************************************************
irrEventManager
Copyright (C) 2007-2008 Keith Holbrook
This file is part of "irrEventManager".
For conditions of distribution and use, see copyright notice in irrEventManagerr.h

*****************************************************************/

#ifndef IEVENT_EX_H
#define IEVENT_EX_H

#include "IEventReceiver.h"
#include "IEventRecEx.h"

namespace irr {


 enum EMOUSE_BUTTONS
    {
        EMB_L =0,
        EMB_R,
        EMB_M

    };


    class IEventEx
    {
    public:

        virtual ~IEventEx() {}

        virtual bool doEvent(const SEvent&)=0;

        //!creates a new unique id for a receiver
        /**the id counter is incremented Before returning*/
        virtual s32 getId()=0;

        //!sets the id counter for all new ids
        /**no error checking! use carefully!*/
        virtual void setId(s32)=0;

        virtual u32 getReceiverCount()=0;

        //!remove (drop) all receivers
        virtual void removeAll()=0;

        //!add a new receiver
        //!item is used for GUI Context menus
        virtual bool add(IEventRecEx*,s32 item=-1)=0;

        //!remove receiver
        virtual  void remove(IEventRecEx*)=0;

        //!remove all receivers  with matching Caller
        virtual void removeByCaller(void*)=0;

        //!remove  all  receivers  with matching id
        virtual void removeById(s32)=0;

        //!remove  all  receivers  with matching data pointer
        virtual void removeByData(void*)=0;

        //!remove  all  receivers  with matching object pointer
        virtual void removeByObject(void*)=0;

        //!get type of event
        virtual EEVENT_TYPE getType()=0;

        //!get type of guievent(if guievent)
        virtual gui::EGUI_EVENT_TYPE getGuiEventType()=0;



    };



}


#endif // IEVENT_H
